<template>
	<view class="wrap">
		<view class="content">

		</view>
		<button @click="sendMsg">提交数据</button>

	</view>
</template>

<script>
	export default {
		components: {

		},
		data() {
			return {
				socketOpen: false, //是否连接
			}
		},
		onLoad() {
			//进入这个页面的时候创建websocket连接【整个页面随时使用】
			this.sokcet();
		},
		onShow() {

		},
		onHide() {
			console.log('页面隐藏')
		},
		//监听页面卸载
		onUnload() {
			console.log('监听页面卸载')
			if (this.socketOpen == true) {
				uni.closeSocket();
			}
		},
		methods: {
			sokcet() {
				var _this = this;
				uni.closeSocket();
				this.socketOpen = false;
				try {
					//WebSocket的地址
					var url = 'ws://101.200.219.216:9503';
					// 连接
					uni.connectSocket({
						url: url,
					});
					// 监听WebSocket连接已打开
					uni.onSocketOpen(function(res) {
						console.log(res, 'WebSocket连接已打开！');
						_this.socketOpen = true;
					});
					// 监听连接失败
					uni.onSocketError(function(err) {
						console.log('WebSocket连接打开失败，请检查！', err);
						// e.code === 1000  表示正常关闭。 无论为何目的而创建, 该链接都已成功完成任务。
						// e.code !== 1000  表示非正常关闭。
						if (err && err.code !== 1000) {
							setTimeout(function() {
								_this.socketOpen = true;
								uni.connectSocket({
									url: url,
								});
							}, 5 * 1000)
						}
					});
					// 监听连接关闭
					uni.onSocketClose(function(err) {
						console.log('WebSocket连接关闭！', err);
						if (err && err.code !== 1000) {
							setTimeout(function() {
								_this.socketOpen = true;
								uni.connectSocket({
									url: url,
								});
							}, 5 * 1000)
						}
					});
					// 监听收到信息
					uni.onSocketMessage(function(res) {
						console.log(res, 'WebSocket监听收到信息！', res);
						uni.hideLoading();
						//与后端规定好返回值分别代表什么，写业务逻辑
						let serverData = res.data; //这是字符串，如果要对象记得转换一下

					})
				} catch (e) {

				}

			},
			//向后端发送命令
			sendMsg(res) {
				console.log(this.socketOpen)
				if (this.socketOpen == false) {
					return
				}
				let data = JSON.stringify(res);
				// console.log(data)
				try {
					//通过 WebSocket 连接发送数据
					uni.sendSocketMessage({
						data: '测试而已'
					});
				} catch (e) {
					console.log(e, '断线啦')
					uni.closeSocket();
				}
			},
		}
	}
</script>
